#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>

// mysql的插入语句
int add(MYSQL* mysql)
{
    const char* sql = "insert into test_tb values(0, 20, '校长', 77.5);";
    // 执行sql语句
    int ret = mysql_query(mysql, sql);
    if(ret != 0)
    {
        // 返回错误信息
        printf("query sql failed:%s\n", mysql_error(mysql));
        return -1;
    }
    return 0;
}

// mysql的修改语句
int mod(MYSQL* mysql)
{
    const char* sql = "update test_tb set name='小王' where id=2;";
    // 执行sql语句
    int ret = mysql_query(mysql, sql);
    if(ret != 0)
    {
        // 返回错误信息
        printf("query sql failed:%s\n", mysql_error(mysql));
        return -1;
    }
    return 0;
}

// mysql的删除语句
int del(MYSQL* mysql)
{
    const char* sql = "delete from test_tb where id=2;";
    // 执行sql语句
    int ret = mysql_query(mysql, sql);
    if(ret != 0)
    {
        // 返回错误信息
        printf("query sql failed:%s\n", mysql_error(mysql));
        return -1;
    }
    return 0;
}

// mysql的查询语句
int get(MYSQL* mysql)
{
    const char* sql = "select * from test_tb;";
    
    int ret = mysql_query(mysql, sql);
    if(ret != 0)
    {
        printf("query sql failed:%s\n", mysql_error(mysql));
        return -1;
    }
    // 把查询结果保存到本地
    MYSQL_RES* res = mysql_store_result(mysql);
    if(res == NULL)
    {
        printf("store result failed:%s\n", mysql_error(mysql));
        return -1;
    }
    // 获取结果集res的行和列
    int row_num = mysql_num_rows(res);
    int col_num = mysql_num_fields(res);
    // 遍历结果集
    for(int i = 0; i < row_num; i++)
    {
        MYSQL_ROW row = mysql_fetch_row(res); // 一次获取一行数据
        for(int j = 0; j < col_num; j++)
        {
            printf("%s\t", row[j]); // 对一行数据打印每一个字段的值
        }
        printf("\n");
    }
    // 释放结果集
    mysql_free_result(res);

    return 0;
}

int main()
{
    // 初始化操作句柄
    MYSQL* mysql = mysql_init(NULL);
    // 连接mysql服务器
    if(mysql_real_connect(mysql, "127.0.0.1", "root", "123456", "test_db", 0, NULL, 0) == NULL)
    {
        printf("connect mysql server fail!\n");
        return -1;
    }
    // 设置客户端字符集
    mysql_set_character_set(mysql, "utf8");
    // add(mysql);
    // mod(mysql);
    // del(mysql);
    get(mysql);

    mysql_close(mysql);

    return 0;
}